package com.lpf.thrift;

import com.lpf.generated.thrift.PersonService;
import org.apache.thrift.TProcessorFactory;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.THsHaServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket;

public class ThriftServer {

    public static void main(String[] args) throws Exception {

        // 代表客户端和服务端建立的socket连接，会绑定到端口号上（有阻塞的、非阻塞的等等）
        TNonblockingServerSocket socket = new TNonblockingServerSocket(8899);

        THsHaServer.Args arg = new THsHaServer.Args(socket).minWorkerThreads(2).maxWorkerThreads(4);
        PersonService.Processor<PersonServiceImpl> processor = new PersonService.Processor<>(new PersonServiceImpl());

        arg.protocolFactory(new TCompactProtocol.Factory());    // 协议层，二进制压缩协议。将数据进行压缩。表示以什么格式传输数据。数据的格式。
        arg.transportFactory(new TFramedTransport.Factory());   // 传输层用到的对象。在底层以什么形式从一端传输到另一端。传输方式。
        arg.processorFactory(new TProcessorFactory(processor));

        /**
         * 传输是一个更底层的一个概念，协议是一个更加高层的概念。协议是我们能够指定的
         */

        TServer server = new THsHaServer(arg);  // THsHaServer：半同步半异步服务器

        System.out.println("Thrift Server Started!");
        server.serve(); // 这个方法是一个死循环
    }
}
